package com.hengyue.common.util;

import com.hengyue.common.utils.ServletUtils;
import com.hengyue.common.utils.StringUtils;
import com.hengyue.common.utils.text.Convert;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

public class PageUtil {
    /**
     * 当前记录起始索引
     */
    public static final String PAGE_NUM = "pageNum";

    /**
     * 每页显示记录数
     */
    public static final String PAGE_SIZE = "pageSize";

    /**
     * 排序列
     */
    public static final String ORDER_BY_COLUMN = "orderByColumn";

    /**
     * 排序的方向 "desc" 或者 "asc".
     */
    public static final String IS_ASC = "isAsc";

    /**
     * 分页参数合理化
     */
    public static final String REASONABLE = "reasonable";

    /**
     * 封装分页对象
     */
    public static Pageable getPageable() {
        int pageNum = Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1);
        int pageSize = Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10);

        // 获取排序字段和方向
        String orderByColumn = ServletUtils.getParameter(ORDER_BY_COLUMN);
        String isAsc = ServletUtils.getParameter(IS_ASC);

        // 创建排序对象
        Sort sort = Sort.unsorted();
        if (StringUtils.isNotEmpty(orderByColumn)) {
            sort = Sort.by("asc".equalsIgnoreCase(isAsc) ?
                            Sort.Direction.ASC : Sort.Direction.DESC,
                    orderByColumn);
        }
        // 返回分页对象（pageNum需要减1，因为Spring Data从0开始计数）
        return PageRequest.of(pageNum - 1, pageSize, sort);
    }


}
